Go 知识点

Go 知识点

定义变量自动赋类型

var v1 int
var v2 string
var v3 [10]int  // 数组
var v4 []int // 数组切片
var v5 struct {
f  int
}
var v6 *int // 指针
var v7 map[string]int  // map,key为string类型,value为int类型
var v8 func(a int) int
v_name := value
name, age := "naveen", 29 // 简短声明

字符串和数字相互转化

//字符串转数字,要做错误处理
start, err := strconv.Atoi(page)
if err != nil {
  return
}
end, err := strconv.Atoi(size)
if err != nil {
 return
}
//数字转字符串 
//page_start := strconv.Itoa(start)
//page_end := strconv.Itoa(end)

循环

  numbers := [6]int{1, 2, 3, 5} 

   /* for 循环 */
   for a := 0; a < 10; a++ {
      fmt.Printf("a 的值为: %d\n", a)
   }

   for a < b {
      a++
      fmt.Printf("a 的值为: %d\n", a)
   }

   for i,x:= range numbers {
      fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)

函数

func cal(price, num int) int {
   total := price * num
   return total
}

func rectProps(length, width float64)(area, perimeter float64) {  
    area = length * width
    perimeter = (length + width) * 2
    return // 不需要明确指定返回值,默认返回 area, perimeter 的值
}

空白符

_ 代替未用到的变量
 area, _ := rectProps(10.8, 5.6) 

if else
if condition {  
} else if condition {
} else {
}

### 常量 const
switch case
 finger := 4
    switch finger {
    case 1:
        fmt.Println("Thumb")
fallthrough   //继续执行case
    case finger >= 2:
        fmt.Println("Index")
case finger >= 2:
        fmt.Println("Index")
default:
fmt.Println("Defalut")

数组 [n]T

Go 语言中不允许混合不同类型的元素
interface{} 类型数组,可以包含任意类型
 var a [3]int
 a := [3]int{12, 78, 50}
 a := [3]int{12}
 num := [...]int{5, 6, 7, 8, 8}
 for i, v := range a {//range returns both the index and value  //_,v 
        fmt.Printf("%d the element of a is %.2f\n", i, v)
        sum += v

多维数组

a := [3][2]string{
   {"lion", "tiger"},
   {"cat", "dog"},
   {"pigeon", "peacock"}, // this comma is necessary. The compiler will complain if you omit this comma
}

切片

fruitslice := fruitarray[1:3]
//make切片  
i := make([]int, 5, 5)
//添加
car = append(car,"Toyata")
### 长度和容量
len(cars)   和  cap(cars)
### 数组相加
veggies := []string{"potatoes", "tomatoes", "brinjal"}
fruits := []string{"oranges", "apples"}
food := append(veggies, fruits...)

字典

personSalary := make(map[string]int)

指针

b := 255
var a *int = &b

结构体

type Employee struct {  
    firstName, lastName string
    age, salary         int
}

匿名结构体

var employee struct {
    firstName, lastName string
    age int
}

方法

func (e Employee) displaySalary() {       //e Employee 接收器 e
    fmt.Printf("Salary of %s is %s%d", e.name, e.currency, e.salary)
}

func main() {
    emp1 := Employee {
        name:     "Sam Adolf",
        salary:   5000,
        currency: "$",
    }
    emp1.displaySalary() // 调用 Employee 类型的 displaySalary() 方法
}

信道

a := make(chan int)
data := <- a // 读取信道 a  
a <- data // 写入信道 

类型断言与选择

  • 类型断言
package main

import "fmt"

func assert(i interface{}) {
   v,ok := i.(int)
   fmt.Println(v,ok)
}
func main() {
   var s interface{} = "hello"
   assert(s)
   var i interface{}  = 56
   assert(i)
}
  • 类型选择(Type Switch)
package main

import (
   "fmt"
)

func findType(i interface{}) {
   switch i.(type) {
   case string:
      fmt.Printf("I am a string and my value is %s\n", i.(string))
   case int:
      fmt.Printf("I am an int and my value is %d\n", i.(int))
   default:
      fmt.Printf("Unknown type\n")
   }
}
func main() {
   findType("Naveen")
   findType(77)
   findType(89.98)
}

接口与空接口

  • 接口
package main

import "fmt"

//创建VowelsFinder的接口  该接口有一个 FindVowels 的 方法
type VowelsFinder interface {
   FindVowels() []rune
}

type MyString string

func (ms MyString) FindVowels() []rune  {
   var vowels []rune
   for _,rune :=range ms{
      if rune =='a' || rune == 'e' || rune == 'i' || rune == 'u'|| rune == 'o'{
         vowels =append(vowels,rune)
      }
   }
   return vowels
}

func main() {
   name := MyString("sam Anderson")
   var v VowelsFinder
   v = name
   fmt.Printf("Vowels are %c",v.FindVowels())
}
  • 空接口
package main

import (
   "fmt"
)

func describe(i interface{}) {
   fmt.Printf("Type = %T, value = %v\n", i, i)
}

func main() {
   s := "Hello World"
   describe(s)
   i := 55
   describe(i)
   strt := struct {
      name string
   }{
      name: "Naveen R",
   }
   describe(strt)
}
}

接口用途

package main

import "fmt"

type SalaryCal interface {
   Cal() int
}

// 长期员工 薪资是 basicpay 与 pf 相加之和
type Parmanent struct {
   empId int
   basicpay int
   pf int
}

//合同员工 只有基本工资 basicpay
type Contract struct {
   empId int
   basicpay int
}

func (p Parmanent) Cal() int {
   return p.basicpay +  p.pf
}

func (c Contract) Cal() int {
   return c.basicpay
}

//接收一个 SalaryCalculator 接口的切片([]SalaryCalculator)作为参数
func totalExpense(s []SalaryCal){
   expense := 0
   for _,v := range s{
      expense += v.Cal()
   }
   fmt.Printf("Total Expense Per Month $%d",expense)
}

func main() {
   pemp1 := Parmanent{1,5000,20}
   pemp2 := Parmanent{2,6000,30}
   cemp1 := Contract{3,3000}
   employees := []SalaryCal{pemp1,pemp2,cemp1}
   totalExpense(employees)
}

指针

指针
尽管 Go 语言没有提供继承机制,但可以通过嵌套其他的接口,创建一个新接口。
和 & 可以互相抵消,同时注意,&可以抵消掉,但&是不可以抵消的 a和&a是一样的,都是a的值,值为1 (因为&互相抵消掉了) 同理,a和&&&&a是一样的,都是1 (因为4个&互相抵消掉了)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容