Golang练习题Day01

241 阅读3分钟

Day01 周作业

  1. Golang是编译型语言还是解释性语言   编译型

  2. 位和字节的关系? 1Byte = 8bit

  3. uint8类型占有几个字节,取值范围是多少?

答:占1个字节,因为uint8中的8代表8位,可代表的int值有 2的8次方即256个,因为uint8取非负,所以取值范围为 0-255

  1. go build的功能是?go run的功能是?

个人理解:

(1)  go build 会将命令执行位置目录下的文件名后缀为.go的文件编译为可执行文件(Windows系统是.exe, Mac系统是Unix),同时在执行时可以通过 -o 参数指定编译后生成的可执行文件的文件名

(2)  go run 则是对目录下对应的go文件进行编译+运行,所以同一环境下,go run的速度是要比慢于 go build的

注意事项:

在使用go build时,是将go文件对应的依赖文件一起打包的(这也是可执行文件的文件大小比go文件的大小大很多的原因),生成的可执行文件在其他没有go语言环境的机器也是可以执行的,但是go run依赖本地的go环境,使用时机器上必须有对应的go环境。

  1. 程序中变量名命名不正确的是(多选)ABCD
A true
B _ xyz
C 2a
D $abc
  1. 声明赋值变量可以用var,比如var name = "yuan",还可以不使用var的简洁声明赋值方式是?

name := "yuan"  

  1. s := "hello golang",将字符串s中的golang字符串切片出来
package main

import (
    "fmt"
    "strings"
)

func getString(s string)(ret string){  // 获取golang
    retSlice := strings.Split(s," ")
    ret = retSlice[1]
    return // 返回值的变量名与定义的返回值变量名相同,因此省略ret
}
 
func main() {
    s := "hello golang" // 待提取字符
    ret := getString(s)
    fmt.Println(ret) // golang
}
  1. 将"北京 上海 广州 深圳"转换为 "北京,上海,广州,深圳"
package main

import (
    "fmt"
    "strings"
)
 
func main() {
    s := "北京 上海 广州 深圳" 
    // 实现方式1
    ret := strings.Replace(s," ",",",strings.Count(s," "))
    fmt.Println(ret)  //北京,上海,广州,深圳

    // 实现方式2
    retSlice := strings.Split(s," ")
    ret2 := strings.Join(retSlice,",")
    fmt.Println(ret2) //北京,上海,广州,深圳
    
}
  1. 基于字符串操作获取用户名和密码s := "mysql ... -u root -p 123"  ,并判断用户名和密码是否是“yuan”和123,获取布尔值。
package main

import (
    "fmt"
    "strings"
    // "reflect"
    // "regexp"
)
 
func main() {
    s := "mysql ... -p123  -uroot"
    // 有个值得注意的地方,登录命令 -u和-p也可以是一后一前,且 -u或者-p后面可以没有空格,直接跟用户名或者密码
    // 因此先判断出 -u 在前还是 -p在前
    userNameIndex := strings.Index(s,"-u")
    pwdIndex := strings.Index(s,"-p")
    fmt.Println(userNameIndex,pwdIndex)
    var username string
    var pwd string
    // 思路: -u和-p的前后位置确定之后,可以通过split切片的方式拿到信息
    if (userNameIndex < pwdIndex){  // -u 在前
        infoStr := s[userNameIndex+2:] // 此时infostr 已经包含username 和 pwd,由-p将它们分割
        username, pwd = strings.Split(infoStr,"-p")[0],strings.Split(infoStr,"-p")[1]
        // 去除空格,拿到值
        username, pwd = strings.TrimSpace(username),strings.TrimSpace(pwd)
        

    }else{   //-p在前
        infoStr := s[pwdIndex+2:] 
        username, pwd = strings.Split(infoStr,"-u")[1],strings.Split(infoStr,"-u")[0]
        username, pwd = strings.TrimSpace(username),strings.TrimSpace(pwd)
    }
    fmt.Println(username,pwd)
    fmt.Println(username == "yuan" && pwd == "123")
    
}
  1. 引导用户输入一个名字,判断改名字是否以小写a或者大写A开头,如果是打印true,否则打印false
package main

import (
    "fmt"
    "strings"
)
 
func main() {
    var name string
    fmt.Println("请输入名字:")
    fmt.Scanln(&name)
    var boolVal bool = strings.HasPrefix(name,"A") || strings.HasPrefix(name,"a")
    fmt.Println(boolVal)
}