代码实现,不用第三方