值類型和引用類型
值類型:int、float、bool、string、數組、結構體struct
引用類型:指針、切片slice、map、管道chan、interface
值類型在拷貝的時候是拷貝值,引用類型拷貝的是指針
```
type 結構體名稱 struct{
field1 int
field2 string
Field3 float32//開頭大寫,可以被其他包訪問
}
type user struct {
password string
Nickname string
? ? Scores [5]float64//數組
? ? ptr *int//指針
? ? slice []int//切片
map1 map[string]string //map
}
var u1 user
var u2 user = User{...}//按順序放字段
var u3 user = User{
password:"123",
Nickname:"123123",//與PHP不同,必須帶逗號
}
var u4 *user = new(user)
(*u4).Nickname = "3"//標準寫法
u4.Nickname = "abc"//等價于標準寫法,為了使用方便底層特定設計
var u5 *user = &user{}
```
結構體別名會被認為新的數據類型,但是可以強制轉換
> JSON輸出
```
u := user{
password: "123",
Nickname: "123123",
}
u.password = "22333"
data, err := json.Marshal(u)//只能轉換首字母大寫的字段
if err != nil {
? ? ?fmt.Println("json encodeing err", err)
return
}
fmt.Println(string(data))
//使用tag標簽解決字段首字母大寫的問題,Nickname->nickname
type user struct {
password string
Nickname string `json:"nickname"`
}
```
- 數據類型
- 數組array
- 切片slice
- 字符串string
- map
- 結構體struct
- 方法func
- 匿名結構體(繼承)
- 字段別名
- 接口interface
- 常量
- 基礎語法
- 循環for
- 遍歷
- 函數func
- defer
- 異常處理error
- 訪問范圍
- 包
- 類型斷言
- 文件
- 打開文件
- 讀取文件
- 寫文件
- 判斷是否存在
- 拷貝文件
- JSON
- 序列化
- 反序列化
- 命令行
- 雜項
- Windows下配置加速
- 相關鏈接
- 占位符
- 隨機數rand
- 單元測試
- goroutine
- 并發和并行
- 協程和主線程
- MPG模式
- 設置CPU數量
- 全局互斥鎖
- 管道
- 示例1
- 示例2
- select
- 異常捕獲
- 反射
- 示例
- 示例-改變值
- 網絡編程
- TCP編程
- 示例一
- redis